﻿using BDQN.Entities;
using System.Linq.Expressions;

namespace BDQN.IDAL
{
    public interface IBaseDal<T> where T: BaseEntity,new()
    {
        /// <summary>
        /// 新增（要求带有批量新增操作）
        /// </summary>
        /// <param name="entity">我们要新增的值</param>
        /// <param name="isSaved">是否为自动保存，如果是true就代表自动保存，这个也是默认项，
        /// 当设定为false的时候就是手动保存</param>
        /// <returns>受影响行数</returns>
        Task<int> AddAsync(T entity, bool isSaved = true);

        Task<int> EditAsync(T entity, bool isSaved = true);

        Task<int> RemoveAsync(T entity, bool isSaved = true);

        Task<List<T>> QueryAsync();
        //这个里面我们使用表达式来进行设定，让我们传递一个箭头函数来当做参数,
        //这个箭头函数要求传递一个实体对象为参数，返回值的类型是bool类型
        Task<List<T>> QueryAsync(Expression<Func<T,bool>> whereLambda);
        Task<T> QueryAsync(int id);

        List<T> Query();

        List<T> Query(Expression<Func<T, bool>> whereLambda);

        T Query(int id);

        //我们需要重写一下 保存数据的方法,这个方法是给新增，修改，删除手动保存数据时用的
        Task<int> SaveDataAsync();
    }
}
